package com.ego.service;

import com.ego.pojo.Sku;
import com.ego.pojo.SpuDetail;
import com.ego.pojo.Stock;
import com.ego.pojo.vo.ResultVO;
import com.ego.pojo.bo.SpuBo;
import org.springframework.http.ResponseEntity;

import java.util.List;
import java.util.Map;

/**
 * @author Ares
 */
public interface SpuService {

    /**
     * 通过以下四个参数查询到SpuBo的分页数据
     * @param key 关键字
     * @param saleable 是否上架
     * @param page 页码
     * @param rows 页码大小
     * @return SpuBo分页数据
     */
    ResultVO<SpuBo> getSpuBo(String key, Boolean saleable, Integer page, Integer rows);

    ResultVO<SpuBo> page(Boolean saleable, Integer page, Integer rows);
    /**
     * 根据ID删除Spu
     * @param id Spu的ID
     */
    void deleteSpu(Long id);

    /**
     * 根据Spu的ID获取Spu的详细信息
     * @param sid Spu的ID
     * @return Spu的详细信息
     */
    SpuDetail getSpuDetailById(Long sid);

    /**
     * 保存SpuBo
     * @param spuBo SpuBo实体
     */
    void saveGoods(SpuBo spuBo);

    /**
     * 通过SpuID查询到Sku集合
     * @param spuId SpuID
     * @return Sku集合
     */
    List<Sku> getSkus(Long spuId);

    /**
     * 修改SpuBo
     * @param spuBo spuBo实体
     */
    void updateGoods(SpuBo spuBo);

    /**
     * 修改上下架
     * @param spuBo spuBo实体
     */
    void editSaleable(SpuBo spuBo);

    SpuBo queryGoodsById(Long id);

    Sku querySkuById(Long skuId);

    List<Sku> querySkuListByIds(List<Long> skuIdList);

    void descrementStock(Map<Long, Integer> stockData);

    List<Stock> findStockListBySkuIdList(List<Long> skuIdList);

    void descrementSeckillStock(Long skuId);
}
